

#include <algorithm>
#include <cstddef>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>

namespace fs = std::filesystem;

int count_lines(const std::string &filename) {
  std::ifstream in(filename);
  return std::count(std::istreambuf_iterator<char>(in),
                    std::istreambuf_iterator<char>(), '\n');
}

std::vector<int> count_lines_in_files(const std::vector<std::string> &files) {
  std::vector<int> results(files.size());
  //   char c = 0;
  //   for (const auto &file : files) {
  //     // int line_count = 0;
  //     // std::ifstream in(file);
  //     // while (in.get(c)) {
  //     //   if (c == '\n') {
  //     //     ++line_count;
  //     //   }
  //     // }
  //     results.emplace_back(count_lines(file));
  //   }
  std::transform(files.cbegin(), files.cend(), results.begin(), count_lines);
  return results;
}

int main() {
  std::string dir = "/usr/include/";
  std::vector<std::string> header_files;
  // 使用 std::filesystem 遍历目录
  try {
    // 遍历目录
    for (const auto &entry : fs::directory_iterator(dir)) {
      // 检查是否是一个文件并且扩展名是 .h
      if (entry.is_regular_file() && entry.path().extension() == ".h") {
        // 获取绝对路径并加入 vector
        header_files.push_back(entry.path().string());
      }
    }

    // // 打印所有找到的 .h 文件的绝对路径
    // std::cout << "Found .h files:" << std::endl;
    // for (const auto &file : header_files) {
    //   std::cout << file << std::endl;
    // }
  } catch (const std::exception &e) {
    std::cerr << "Error accessing directory: " << e.what() << std::endl;
  }

  auto results = count_lines_in_files(header_files);
  for (size_t i = 0; i < results.size(); ++i) {
    std::cout << header_files[i] << " : " << results[i] << std::endl;
  }
}